#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "ohos_types.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "iot_gpio_ex.h"

#define LED_C_GPIO 10
#define KEY_GPIO 7

static void KEYPressed(char *arg)
{
    // 反转 GPIO10 电平
    IotGpioValue value;
    IoTGpioGetOutputVal(LED_C_GPIO, &value);
    IoTGpioSetOutputVal(LED_C_GPIO, !value);
}

static void InterruptExample(void)
{
    // 初始化 LED 灯 GPIO
    IoTGpioInit(LED_C_GPIO);
    IoTGpioSetFunc(LED_C_GPIO, IOT_GPIO_FUNC_GPIO_10_GPIO);
    IoTGpioSetDir(LED_C_GPIO, IOT_GPIO_DIR_OUT);
    // 初始化按键，设置为下降沿触发中断
    IoTGpioInit(KEY_GPIO);
    IoTGpioSetFunc(KEY_GPIO, IOT_GPIO_FUNC_GPIO_7_GPIO);
    IoTGpioSetDir(KEY_GPIO, IOT_GPIO_DIR_IN);
    IoTGpioSetPull(KEY_GPIO, IOT_GPIO_PULL_UP);
    IoTGpioRegisterIsrFunc(KEY_GPIO, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, KEYPressed, NULL);
}

SYS_RUN(InterruptExample);
